/**
 *
 */
package fr.afcepf.al23.qualite.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import fr.afcepf.al23.qualite.entity.Utilisateur;

/**
 * Implementation des definitions de l'interface {@link IDaoUtilisateur}.
 * @author Stagiaire
 *
 */
public class DaoUtilisateurImpl implements IDaoUtilisateur {
    /**
     * Outils de log.
     */
    private org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(getClass());
    /**
     * Datasource pour la connexion a la base de donnee.
     */
    private DataSource ds = new QualiteDataSource();
    /**
     * Requete de verification de la connexion.
     */
    private String reqConnexion = "SELECT * FROM Utilisateur WHERE mail = ? AND mdp = ?";
    /**
     * Indice du parametre 'mail' dans la requete.
     * {@link DaoUtilisateurImpl#reqConnexion}
     */
    private final int indParamMailReqCon = 1;
    /**
     * Indice du parametre 'mot de passe' dans la requete.
     * {@link DaoUtilisateurImpl#reqConnexion}
     */
    private final int indParamMdpReqCon = 2;
    /**
     * Nom de la colonne 'id' de la table 'Utilisateur'.
     */
    private final String colonneId = "id";
    /**
     * Nom de la colonne 'nom' de la table 'Utilisateur'.
     */
    private final String colonneNom = "nom";
    /**
     * Nom de la colonne 'mail' de la table 'Utilisateur'.
     */
    private final String colonneMail = "mail";
    /**
     * Nom de la colonne 'mdp' de la table 'Utilisateur'.
     */
    private final String colonneMdp = "mdp";
    /**
     * Nom de la colonne 'adresse' de la table 'Utilisateur'.
     */
    private final String colonneAdr = "adresse";

    /**
     * constructeur vide.
     */
    public DaoUtilisateurImpl() {
        // TODO Auto-generated constructor stub
    }

    /* (non-Javadoc)
     * @see fr.afcepf.al23.qualite.data.IDaoUtilisateur#seConnecter(java.lang.String, java.lang.String)
     */
    @Override
    public Utilisateur seConnecter(String paramMail, String paramMdp) {
        Utilisateur user = null;
        Connection cnx = null;
        try {
            cnx = ds.getConnection();
            log.debug(" ++++ Connexion Reussie  !!!! ++++");
            PreparedStatement pstmt = cnx.prepareStatement(reqConnexion);
            pstmt.setString(indParamMailReqCon, paramMail);
            pstmt.setString(indParamMdpReqCon, paramMdp);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                user = rsToUtilisateur(rs);
                log.debug(" ++++ Utilisateur trouve  !!!! ++++");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return user;
    }

    /**
     * Methode de conversion d'un resultset en un {@link Utilisateur}.
     * @param paramRs           Resulset ouvert a un enregistrement
     * @return                  {@link Utilisateur}
     * @throws SQLException     SQL Exception si une erreur lors de la lecture d'un enregistrement
     */
    private Utilisateur rsToUtilisateur(ResultSet paramRs) throws SQLException {
        return new Utilisateur(
                paramRs.getInt(colonneId),
                paramRs.getString(colonneNom),
                paramRs.getString(colonneMail),
                paramRs.getString(colonneMdp),
                paramRs.getString(colonneAdr)
                );
    }

    /* (non-Javadoc)
     * @see fr.afcepf.al23.qualite.data.IDaoUtilisateur#enregistrer(fr.afcepf.al23.qualite.entity.Utilisateur)
     */
    @Override
    public Utilisateur enregistrer(Utilisateur paramUtil) {
        // TODO Auto-generated method stub
        return null;
    }

    /* (non-Javadoc)
     * @see fr.afcepf.al23.qualite.data.IDaoUtilisateur#verifMail(java.lang.String)
     */
    @Override
    public boolean verifMail(String paramMail) {
        // TODO Auto-generated method stub
        return false;
    }

}
